package com.woniuxy.springaop1.service.advice;


import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

import java.lang.reflect.Method;

public class MyAspect implements MethodInterceptor {
    /**
     * 类似我们自己写的 动态代理
     * @param invocation
     * @return 返回一个代理后的对象
     * @throws Throwable
     */
    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {
        beforeAdvice();
        //执行的是目标方法 和之前手写的 method.invoke差不多
        Object proceed = invocation.proceed();

        Method method = invocation.getMethod();
        System.out.println("proceed:"+proceed);
        System.out.println(method);
        System.out.println("目标对象打印的方法"+method.getName());
        afterAdvice();
        //这里是返回的对象
        return null;
    }


    public void beforeAdvice(){
        System.out.println("MyAspect.beforeAdvice：方法执行之前……");
    }
    public void afterAdvice() {
        System.out.println("MyAspect.afterAdvice: 方法执行之后……");
    }

}
